home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / gtlayout-source.lha / LTP_PasswordEditRoutine.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  1.9 KB  |  114 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1996 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14. #ifdef DO_PASSWORD_KIND
  15. ULONG __saveds __asm
  16. LTP_PasswordEditRoutine(REG(a0) struct Hook *Hook,REG(a2) struct SGWork *Work,REG(a1) ULONG *Msg)
  17. {
  18.     ObjectNode *Node;
  19.  
  20.     if(GETOBJECT(Work->Gadget,Node))
  21.     {
  22.         STRPTR Buffer = Node->Special.String.RealString;
  23.  
  24.         if(Work->IEvent->ie_Code == 0x5F)
  25.         {
  26.             LayoutHandle *Handle = Hook->h_Data;
  27.  
  28.             if(Handle->HelpHook)
  29.             {
  30.                 Work->Code        = 0x5F;
  31.                 Work->Actions    = (Work->Actions & ~SGA_BEEP) | SGA_END | SGA_USE;
  32.  
  33.                 return(TRUE);
  34.             }
  35.         }
  36.  
  37.         switch(*Msg)
  38.         {
  39.             case SGH_KEY:
  40.  
  41.                 switch(Work->EditOp)
  42.                 {
  43.                     case EO_INSERTCHAR:
  44.  
  45.                         Buffer[Work->BufferPos - 1]    = Work->Code;
  46.                         Buffer[Work->NumChars]        = 0;
  47.  
  48.                         Work->WorkBuffer[Work->BufferPos - 1] = (UBYTE)'·';
  49.  
  50.                         break;
  51.  
  52.                     case EO_CLEAR:
  53.  
  54.                         Work->WorkBuffer[0]    = 0;
  55.                         Work->NumChars        = 0;
  56.                         Work->BufferPos        = 0;
  57.                         Work->EditOp        = EO_BIGCHANGE;
  58.  
  59.                         Buffer[0] = 0;
  60.  
  61.                         break;
  62.  
  63.                     case EO_DELBACKWARD:
  64.  
  65.                         Buffer[Work->NumChars] = 0;
  66.                         break;
  67.  
  68.                     case EO_NOOP:
  69.  
  70.                         break;
  71.  
  72.                     case EO_ENTER:
  73.  
  74.                         if(!(Work->IEvent->ie_Qualifier & QUALIFIER_SHIFT))
  75.                         {
  76.                             if(!Node->Special.String.LastGadget && Node->Special.String.LayoutHandle->AutoActivate)
  77.                                 Work->Actions |= SGA_NEXTACTIVE;
  78.  
  79.                             if(!(Work->Actions & SGA_NEXTACTIVE))
  80.                                 Work->Code = '\r';
  81.                         }
  82.  
  83.                         break;
  84.  
  85.                     case EO_MOVECURSOR:
  86.                     case EO_DELFORWARD:
  87.  
  88.                         Work->Actions &= ~SGA_USE;
  89.                         break;
  90.  
  91.                     default:
  92.  
  93.                         Work->Actions &= ~SGA_USE;
  94.                         Work->Actions |=  SGA_BEEP;
  95.                         break;
  96.                 }
  97.  
  98.                 break;
  99.  
  100.             default:
  101.  
  102.                 Work->BufferPos    = Work->NumChars;
  103.                 Work->EditOp    = EO_BIGCHANGE;
  104.  
  105.                 break;
  106.         }
  107.  
  108.         return(TRUE);
  109.     }
  110.     else
  111.         return(FALSE);
  112. }
  113. #endif
  114.